// app.js
App({
  onLaunch: function () {
    // 初始化全局数据
    this.globalData = {
      // env 参数说明：
      //   env 参数决定接下来小程序发起的云开发调用（wx.cloud.xxx）会默认请求到哪个云环境的资源
      //   此处请填入环境 ID, 环境 ID 可打开云控制台查看
      //   如不填则使用默认环境（第一个创建的环境）
      env: "",
      // 头部总高度，供其他页面使用
      totalHeaderHeight: "",
      // API基础地址
      // baseUrl: 'http://127.0.0.1:8000'
      baseUrl: 'https://api.jingyizhiyuan.cn/'
    };

    // 计算头部总高度
    this.calculateHeaderHeight();

    if (!wx.cloud) {
      console.error("请使用 2.2.3 或以上的基础库以使用云能力");
    } else {
      wx.cloud.init({
        env: this.globalData.env,
        traceUser: true,
      });
    }
  },

  // 计算头部高度的方法
  calculateHeaderHeight: function () {

    // 获取系统信息
    const systemInfo = wx.getSystemInfoSync();
    // 获取状态栏高度
    const statusBarHeight = systemInfo.statusBarHeight;
    // 导航栏高度通常为44px
    const navBarHeight = 44;
    // 计算头部总高度
    const totalHeight = statusBarHeight + navBarHeight;
    // 存储到全局数据中
    this.globalData.totalHeaderHeight = totalHeight;
    console.log(this.globalData.totalHeaderHeight)
  },

  /**
   * 统一请求方法
   * @param {string} url 请求地址
   * @param {Object} data 请求数据
   * @param {Object} options 配置项
   * @returns {Promise}
   */
  request: function (url, data = {}, options = {}) {
    const { baseUrl } = this.globalData;
    const {
      method = 'GET',
      header = {},
      loading = true,
      skipLoginCheck = false, // 新增：是否跳过登录检查
      skipAutoToken = false // 新增：是否跳过自动添加token
    } = options;

    return new Promise((resolve, reject) => {
      // 显示加载
      if (loading) {
        // wx.showLoading({
        //   title: '加载中...',
        //   mask: true
        // });
      }

      // 自动添加token到请求头（除非明确跳过）
      const requestHeader = {
        'content-type': 'application/json',
        ...header
      };

      if (!skipAutoToken) {
        const token = wx.getStorageSync('userToken');
        if (token) {
          requestHeader['token'] = token;
        }
      }

      wx.request({
        url: baseUrl + url,
        method,
        data,
        header: requestHeader,
        success: (res) => {
          // 检查响应的code字段，当code不是200时抛出错误
          if (res.data && res.data.code !== 200) {
            // 登录相关错误处理（400或401错误）
            const message = res.data.msg || res.data.message || '';
            const isLoginError = !skipLoginCheck &&
              (res.data.code === 400 || res.data.code === 401) &&
              (message.includes('登录') || message.includes('token') ||
                message.includes('未登录') || message.includes('请先登录') ||
                message.includes('登录状态') || message.includes('认证失败'));

            if (isLoginError) {
              // 清除本地存储的token和用户信息
              wx.removeStorageSync('userToken');
              wx.removeStorageSync('userInfo');

              // 显示登录提示并跳转到登录页面
              wx.showModal({
                title: '提示',
                content: message || '请先登录',
                showCancel: false,
                success: function (res) {
                  if (res.confirm) {
                    // 跳转到登录页面
                    wx.navigateTo({
                      url: '/pages/logins/logins'
                    });
                  }
                }
              });

              // 拒绝Promise，但不抛出错误到调用方
              reject({
                code: res.data.code,
                message: message,
                data: res.data,
                isLoginError: true // 标记为登录错误
              });
            } else {
              // 其他错误正常处理
              reject({
                code: res.data.code || -1,
                message: message || '请求失败',
                data: res.data
              });
            }
          } else {
            // code为200时正常返回数据
            resolve(res.data);
          }
        },
        fail: (err) => {
          // 网络错误处理
          reject({
            code: -1,
            message: '网络错误，请检查网络连接',
            error: err
          });
        },
        complete: () => {
          // 隐藏加载
          if (loading) {
            wx.hideLoading();
          }
        }
      });
    });
  },

  /**
   * 前台API接口集合
   */
  api: {
    // 获取学校列表
    getSchoolList: function () {
      return getApp().request('/frontend/getSchoolList');
    },

    // 获取科目列表
    getSubjectList: function (params = {}) {
      return getApp().request('/frontend/getSubjectList', params);
    },

    // 获取题目列表
    getQuestionList: function (params = {}) {
      return getApp().request('/frontend/getQuestionList', params);
    },

    // 获取题目详情
    getQuestionDetail: function (questionId) {
      // 兼容两种调用方式：直接传ID或对象形式
      const id = typeof questionId === 'object' ? questionId.questionId : questionId;
      return getApp().request(`/frontend/getQuestionDetail/${id}`);
    },

    // 根据ID获取科目详情
    getSubjectDetail: function (id) {
      return getApp().request(`/frontend/getSubjectDetail/${id}`);
    },

    // 根据ID获取章节详情
    getChapterDetail: function (id) {
      return getApp().request(`/frontend/getChapterDetail/${id}`);
    },

    // 提交纠错反馈
    submitFeedback: function (data) {
      return getApp().request('/frontend/submitFeedback', data, {
        method: 'POST'
      });
    },

    donationlist: function (data) {
      return getApp().request('/frontend/donation/list', data, {
        method: 'GET'
      });
    },
    // 获取捐赠滚动信息列表
    getDonationScrollList: function (data) {
      return getApp().request('/frontend/donation/scroll-list', data, {
        method: 'GET'
      });
    },
    // 提交纠错或者评论记录下
    donationcreate: function (data) {
      return getApp().request('/frontend/donation/create', data, {
        method: 'POST'
      });
    },
    // 微信一键登录
    wechatLogin: function (code) {
      return getApp().request('/frontend/wechatLogin', { code }, {
        method: 'POST',
        skipAutoToken: true // 登录请求不需要token
      });
    },

    // 获取用户信息
    getUserInfo: function () {
      return getApp().request('/frontend/getUserInfo', {}, {
        method: 'GET'
      });
    },

    // 更新用户学校
    updateUserSchool: function (schoolId) {
      return getApp().request('/frontend/updateUserSchool', { schoolId }, {
        method: 'POST'
      });
    },

    // 获取用户科目ID列表
    getUserSubjectIds: function () {
      return getApp().request('/frontend/getUserSubjectIds', {}, {
        method: 'GET',
        loading: false // 禁用默认loading，因为调用方会手动显示
      });
    },

    // 添加到错题集
    addToErrorBook: function (questionId) {
      return getApp().request('/frontend/addToErrorBook', { questionId }, {
        method: 'POST'
      });
    },

    // 从错题集中移除
    removeFromErrorBook: function (questionId) {
      return getApp().request('/frontend/removeFromErrorBook', { questionId }, {
        method: 'POST'
      });
    },

    // 检查题目是否在错题集中
    checkErrorBookStatus: function (questionId) {
      return getApp().request('/frontend/checkErrorBookStatus', { questionId }, {
        method: 'GET',
        loading: false // 禁用默认loading，避免多次加载提示
      });
    },

    // 获取错题集列表
    getErrorBookList: function (params = {}) {
      return getApp().request('/frontend/getErrorBookList', params, {
        method: 'GET'
      });
    },

    // 检查题目是否在错题集中
    checkErrorBookStatus: function (questionId) {
      return getApp().request('/frontend/checkErrorBookStatus', { questionId }, {
        method: 'GET'
      });
    },

    // 更新错题复习记录
    updateErrorBookReview: function (data) {
      return getApp().request('/frontend/updateErrorBookReview', data, {
        method: 'POST'
      });
    },

    // 获取用户科目详细信息列表
    getUserSubjects: function () {
      return getApp().request('/frontend/getUserSubjects', {}, {
        method: 'GET',
        loading: false // 禁用默认loading
      });
    },

    // 保存用户选择的科目（知识点专用）
    saveUserKnowledgeSubjects: function (subjectIds) {
      return getApp().request('/frontend/saveUserKnowledgeSubjects', { subjectIds }, {
        method: 'POST'
      });
    },

    // 获取用户已选择的科目（知识点专用）
    getUserKnowledgeSubjects: function () {
      return getApp().request('/frontend/getUserKnowledgeSubjects', {}, {
        method: 'GET',
        loading: false // 禁用默认loading
      });
    },

    // 获取用户已选择的科目ID列表（知识点专用）
    getUserKnowledgeSubjectIds: function () {
      return getApp().request('/frontend/getUserKnowledgeSubjectIds', {}, {
        method: 'GET',
        loading: false // 禁用默认loading
      });
    },
    // 获取轮播图列表
    getBannerList: function (params = {}) {
      return getApp().request('/frontend/getBannerList', params, {
        method: 'GET'
      });
    },
    // 获取章节列表
    getChapterList: function (params = {}) {
      return getApp().request('/frontend/getChapterList', params, {
        method: 'GET'
      });
    },

    // 根据章节获取问题列表
    getQuestionsByChapter: function (params = {}) {
      return getApp().request('/frontend/getQuestionsByChapter', params, {
        method: 'GET',
        loading: false // 禁用默认loading，由页面控制
      });
    },

    // 获取或创建答题卡
    getOrCreateAnswerCard: function (params = {}) {
      return getApp().request('/frontend/getOrCreateAnswerCard', params, {
        method: 'GET'
      });
    },

    // 提交答题记录
    submitAnswer: function (data = {}) {
      return getApp().request('/frontend/submitAnswer', data, {
        method: 'POST'
      });
    },

    // 获取答题卡详情
    getAnswerCardDetail: function (params = {}) {
      return getApp().request('/frontend/getAnswerCardDetail', params, {
        method: 'GET'
      });
    },

    // 重置答题卡
    resetAnswerCard: function (data = {}) {
      return getApp().request('/frontend/resetAnswerCard', data, {
        method: 'POST'
      });
    },

    // 获取评论列表
    getCommentList: function (params = {}) {
      return getApp().request('/frontend/getCommentList', params, {
        method: 'GET'
      });
    },

    // 添加评论
    addComment: function (data = {}) {
      return getApp().request('/frontend/addComment', data, {
        method: 'POST'
      });
    },

    // 点赞评论
    likeComment: function (data = {}) {
      return getApp().request('/frontend/likeComment', data, {
        method: 'POST'
      });
    },

    // 删除评论
    deleteComment: function (data = {}) {
      return getApp().request('/frontend/deleteComment', data, {
        method: 'POST'
      });
    },

    // 获取知识点列表
    getKnowledgePointList: function (params = {}) {
      return getApp().request('/frontend/getKnowledgePointList', params, {
        method: 'GET',
        loading: false // 禁用默认loading
      });
    },

    // 获取知识点详情
    getKnowledgePointDetail: function (params = {}) {
      return getApp().request('/frontend/getKnowledgePointDetail', params, {
        method: 'GET',
        loading: false // 禁用默认loading
      });
    },

    // 收藏/取消收藏知识点
    toggleFavorite: function (data = {}) {
      return getApp().request('/frontend/toggleFavorite', data, {
        method: 'POST'
      });
    },

    // 获取用户收藏列表
    getUserFavorites: function () {
      return getApp().request('/frontend/getUserFavorites', {}, {
        method: 'GET'
      });
    },

    // 获取活动问题列表
    getActivityQuestionList: function (params = {}) {
      return getApp().request('/frontend/activity/question/list', params, {
        method: 'GET',
        skipAutoToken: true // 活动问题列表不需要token验证
      });
    },

    // 获取活动详情
    getActivityDetail: function (params = {}) {
      return getApp().request('/frontend/activity/detail', params, {
        method: 'GET',
        skipAutoToken: true // 活动详情不需要token验证
      });
    },

    // 保存活动答题结果
    saveActivityResult: function (data = {}) {
      return getApp().request('/frontend/activity/result/save', data, {
        method: 'POST'
      });
    },

    // 获取用户活动答题结果
    getActivityResult: function (params = {}) {
      return getApp().request('/frontend/activity/result/get', params, {
        method: 'GET'
      });
    },

    // 获取用户统计信息
    getUserStats: function () {
      return getApp().request('/frontend/user-stats', {}, {
        method: 'GET'
      });
    }
  },

  // 全局数据
  globalData: {}
});
